home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / filesyst / ext / extfs.p6 / extfs
Text File  |  1996-11-17  |  5KB  |  151 lines

  1. *** linux-0.98.5/fs/ext/dir.c    Tue Nov 10 12:54:53 1992
  2. --- linux/fs/ext/dir.c    Sun Nov 15 20:06:26 1992
  3. ***************
  4. *** 69,74 ****
  5. --- 69,76 ----
  6.   
  7.       if (!inode || !S_ISDIR(inode->i_mode))
  8.           return -EBADF;
  9. +     if (filp->f_pos % 8 != 0)
  10. +         return -EBADF;
  11.       while (filp->f_pos < inode->i_size) {
  12.           offset = filp->f_pos & 1023;
  13.           bh = ext_bread(inode,(filp->f_pos)>>BLOCK_SIZE_BITS,0);
  14. ***************
  15. *** 78,92 ****
  16.           }
  17.           de = (struct ext_dir_entry *) (offset + bh->b_data);
  18.           while (offset < 1024 && filp->f_pos < inode->i_size) {
  19. !             offset += de->rec_len;
  20. !             filp->f_pos += de->rec_len;
  21. !             if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
  22. !                 de->rec_len < de->name_len + 8) {
  23. !                 printk ("ext_readdir: bad directory entry\n");
  24.                   printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
  25.                       inode->i_dev, inode->i_ino, offset, de->rec_len, de->name_len);
  26. !                 return 0;
  27.               }
  28.               if (de->inode) {
  29.                   for (i = 0; i < de->name_len; i++)
  30.                       if (c = de->name[i])
  31. --- 80,98 ----
  32.           }
  33.           de = (struct ext_dir_entry *) (offset + bh->b_data);
  34.           while (offset < 1024 && filp->f_pos < inode->i_size) {
  35. !             if (de->rec_len < 8 || de->rec_len % 8 != 0 ||
  36. !                 de->rec_len < de->name_len + 8 ||
  37. !                 (de->rec_len + filp->f_pos - 1) / 1024 > (filp->f_pos / 1024)) {
  38. !                 printk ("ext_readdir: bad dir entry, skipping\n");
  39.                   printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
  40.                       inode->i_dev, inode->i_ino, offset, de->rec_len, de->name_len);
  41. !                 filp->f_pos += 1024-offset;
  42. !                 if (filp->f_pos > inode->i_size)
  43. !                     filp->f_pos = inode->i_size;
  44. !                 continue;
  45.               }
  46. +             offset += de->rec_len;
  47. +             filp->f_pos += de->rec_len;
  48.               if (de->inode) {
  49.                   for (i = 0; i < de->name_len; i++)
  50.                       if (c = de->name[i])
  51. *** linux-0.98.5/fs/ext/namei.c    Tue Nov 10 12:54:53 1992
  52. --- linux/fs/ext/namei.c    Sun Nov 15 20:05:31 1992
  53. ***************
  54. *** 122,139 ****
  55.               if (prev_dir)
  56.                   *prev_dir = NULL;
  57.           }
  58. !         if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
  59. !             de->rec_len < de->name_len + 8) {
  60.               printk ("ext_find_entry: bad dir entry\n");
  61.               printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
  62.                   dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
  63. !             brelse (bh);
  64. !             return NULL;
  65.           }
  66.           if (ext_match(namelen,name,de)) {
  67.               *res_dir = de;
  68.               if (next_dir)
  69. !                 if (offset + de->rec_len < dir->i_size)
  70.                       *next_dir = (struct ext_dir_entry *)
  71.                           ((char *) de + de->rec_len);
  72.                   else
  73. --- 122,144 ----
  74.               if (prev_dir)
  75.                   *prev_dir = NULL;
  76.           }
  77. !         if (de->rec_len < 8 || de->rec_len % 8 != 0 ||
  78. !             de->rec_len < de->name_len + 8 ||
  79. !             (((char *) de) + de->rec_len-1 >= BLOCK_SIZE+bh->b_data)) {
  80.               printk ("ext_find_entry: bad dir entry\n");
  81.               printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
  82.                   dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
  83. !             de = (struct ext_dir_entry *) (bh->b_data+BLOCK_SIZE);
  84. !             offset = ((offset / BLOCK_SIZE) + 1) * BLOCK_SIZE;
  85. !             continue;
  86. ! /*            brelse (bh);
  87. !             return NULL; */
  88.           }
  89.           if (ext_match(namelen,name,de)) {
  90.               *res_dir = de;
  91.               if (next_dir)
  92. !                 if (offset + de->rec_len < dir->i_size &&
  93. !                     ((char *)de) + de->rec_len < BLOCK_SIZE+bh->b_data)
  94.                       *next_dir = (struct ext_dir_entry *)
  95.                           ((char *) de + de->rec_len);
  96.                   else
  97. ***************
  98. *** 221,227 ****
  99.   #endif
  100.               brelse(bh);
  101.               bh = NULL;
  102. !             bh = ext_bread(dir,offset>>BLOCK_SIZE_BITS,1);
  103.               if (!bh)
  104.                   return NULL;
  105.               de = (struct ext_dir_entry *) bh->b_data;
  106. --- 226,232 ----
  107.   #endif
  108.               brelse(bh);
  109.               bh = NULL;
  110. !             bh = ext_bread(dir,offset>>BLOCK_SIZE_BITS,0);
  111.               if (!bh)
  112.                   return NULL;
  113.               de = (struct ext_dir_entry *) bh->b_data;
  114. ***************
  115. *** 228,235 ****
  116.           }
  117.           if (offset >= dir->i_size) {
  118.               /* Check that the directory entry fits in the block */
  119. !             if (offset % BLOCK_SIZE == 0 
  120. !                 || (BLOCK_SIZE - (offset % BLOCK_SIZE)) < rec_len) {
  121.                   if ((offset % BLOCK_SIZE) != 0) {
  122.                       /* If the entry does not fit in the
  123.                          block, the remainder of the block
  124. --- 233,240 ----
  125.           }
  126.           if (offset >= dir->i_size) {
  127.               /* Check that the directory entry fits in the block */
  128. !             if (offset % BLOCK_SIZE == 0  ||
  129. !                 (BLOCK_SIZE - (offset % BLOCK_SIZE)) < rec_len) {
  130.                   if ((offset % BLOCK_SIZE) != 0) {
  131.                       /* If the entry does not fit in the
  132.                          block, the remainder of the block
  133. ***************
  134. *** 262,268 ****
  135.               dir->i_ctime = CURRENT_TIME;
  136.           }
  137.           if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
  138. !             de->rec_len < de->name_len + 8) {
  139.               printk ("ext_addr_entry: bad dir entry\n");
  140.               printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
  141.                   dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
  142. --- 267,274 ----
  143.               dir->i_ctime = CURRENT_TIME;
  144.           }
  145.           if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
  146. !             de->rec_len < de->name_len + 8 ||
  147. !             (((char *) de) + de->rec_len-1 >= BLOCK_SIZE+bh->b_data)) {
  148.               printk ("ext_addr_entry: bad dir entry\n");
  149.               printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
  150.                   dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
  151.